#ifndef __PARSETREE_H__
#define __PARSETREE_H__

#include <stdio.h>

#define PARSE_TREE_NODE_NAME_MAX 5000

struct _parse_tree_node {
    struct _parse_tree_node * parent;   // 父节点指针
    struct _parse_tree_node * children[10];  // 子节点数组
    int children_num;  // 子节点数量

    char name[PARSE_TREE_NODE_NAME_MAX];  // 节点名称
};
typedef struct _parse_tree_node parse_tree_node;

// 创建一个新的解析树节点
parse_tree_node * new_parse_tree_node(const char * name);

// 向父节点添加子节点
int parse_tree_add_child(parse_tree_node * parent, parse_tree_node * child);

// 删除解析树节点
void del_parse_tree_node(parse_tree_node * node, int recursive);

// 解析树结构
struct _parse_tree {
    parse_tree_node * root;  // 解析树根节点
};
typedef struct _parse_tree parse_tree;

// 创建一个新的解析树
parse_tree* new_parse_tree();

// 删除解析树
void del_parse_tree(parse_tree * tree);

// 打印解析树
void print_parse_tree(FILE * fout, parse_tree * tree);

#endif /* PARSETree.h */